PROGRAM Multiplicacion_matrices;

CONST N = 10;

TYPE
    TMatriz = ARRAY [1..N,1..N] OF integer;

VAR
   x,y,z: integer;
   A,B,C: TMatriz;
   i,j: integer;


PROCEDURE suma(A,B: TMatriz; inicio_x, final_x, inicio_y, final_y: integer; VAR C: TMatriz);
VAR
  i,j: integer;
BEGIN
  FOR i:=inicio_x TO final_x DO
    FOR j:=inicio_y TO final_y DO
      C[i,j] := A[i,j]+B[i,j];
END;



PROCEDURE multiplica(A,B: TMatriz; inicio_x, final_x, y, inicio_z, final_z: integer; VAR C: TMatriz);
VAR
  mitad_x, mitad_z: integer;
  i: integer;

BEGIN

  mitad_x := (inicio_x + final_x) div 2;
  mitad_z := (inicio_z + final_z) div 2;

  IF (inicio_x = final_x) AND (inicio_z = final_z) THEN
    FOR i:=1 TO y DO
       C[mitad_x,mitad_z] := C[mitad_x,mitad_z] + A[mitad_x,i] * B[i,mitad_z]

  ELSE IF (inicio_x<=final_x) AND (inicio_z<=final_z) THEN
    BEGIN

       multiplica(A,B, inicio_x, mitad_x, y, inicio_z, mitad_z, C);

       multiplica(A,B, inicio_x, mitad_x, y, mitad_z+1, final_z, C);

       multiplica(A,B, mitad_x+1, final_x, y, inicio_z, mitad_z, C);

       multiplica(A,B, mitad_x+1, final_x, y, mitad_z+1, final_z, C);

    END;

END;



BEGIN

   read(x);
   read(y);
   readln(z);

   FOR i:=1 TO x DO
   BEGIN
     FOR j:=1 TO y DO
       read(A[i,j]);

     readln;
   END;

   FOR i:=1 TO y DO
   BEGIN
     FOR j:=1 TO z DO
       read(B[i,j]);

     readln;
   END;

   FOR i:=1 TO x DO
     FOR j:=1 TO z DO
       C[i,j]:=0;


   multiplica(A,B,1,x,y,1,z,C);


   FOR i:=1 TO x DO
   BEGIN
     FOR j:=1 TO z DO
       Write(C[i,j],' ');

     Writeln;
   END;


   readln;
END.
